package com.example.demo07cache;

import com.alicp.jetcache.anno.config.EnableMethodCache;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.scheduling.annotation.EnableAsync;

/**
 * 一、环境基本搭建
 * 1、导入数据库文件，创建出 department 和 employee 表
 * 2、创建 javaBean 封装数据
 * 3、整合 mybatis 操作数据库
 * (1) 配置数据源信息
 * (2) 使用注解版的 mybatis
 * 使用 @MapperScanner 扫描 Mapper 映射接口
 * <p>
 * 二、快速体验缓存
 * 1、开启基于注解的缓存
 *
 * @EnableCaching 2、给方法标注缓存即可
 * @Cacheable
 * @CachePut
 * @CacheEvict [ɪˈvɪkt] 驱逐，逐出
 * @Caching
 * @@CacheConfig(cacheNames = "emp")
 * <p>
 * 默认使用的是 ConcurrentMapCacheManager == ConcurrentMapCache，将数据保存在 ConcurrentMap<Object, Object>中，
 * 开发中使用缓存中间件: Redis、Ehcache
 * <p>
 * 三、整合 Redis 作为缓存
 * 1. 安装 Redis
 * 2. 引入 Redis 的 starter
 * 3. 配置 Redis
 * <p>
 * 原理: 匹配上了 {@link org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration}
 * (1) 引入 redis 的 starter，容器中保存的是 RedisCacheManager
 * (2) RedisCacheManager 帮我们创建 RedisCache 来作为缓存组件，RedisCache 通过操作 redis 缓存数据
 * (3) 默认保存数据 k(String)-v(Object)，利用序列化保存
 * (4) {@link RedisAutoConfiguration}
 */
@SpringBootApplication
@EnableMethodCache(basePackages = "com.example.demo07cache.service")
@MapperScan(basePackages = "com.example.demo07cache.mapper")
public class Demo07CacheApplication {

    public static void main(String[] args) {
        SpringApplication.run(Demo07CacheApplication.class, args);
    }

}
